home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / bits / select.h < prev    next >
C/C++ Source or Header  |  2009-10-07  |  3KB  |  87 lines

  1. /* Copyright (C) 1997, 1998, 1999, 2001, 2008 Free Software Foundation, Inc.
  2.    This file is part of the GNU C Library.
  3.  
  4.    The GNU C Library is free software; you can redistribute it and/or
  5.    modify it under the terms of the GNU Lesser General Public
  6.    License as published by the Free Software Foundation; either
  7.    version 2.1 of the License, or (at your option) any later version.
  8.  
  9.    The GNU C Library is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.    Lesser General Public License for more details.
  13.  
  14.    You should have received a copy of the GNU Lesser General Public
  15.    License along with the GNU C Library; if not, write to the Free
  16.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  17.    02111-1307 USA.  */
  18.  
  19. #ifndef _SYS_SELECT_H
  20. # error "Never use <bits/select.h> directly; include <sys/select.h> instead."
  21. #endif
  22.  
  23. #include <bits/wordsize.h>
  24.  
  25.  
  26. #if defined __GNUC__ && __GNUC__ >= 2
  27.  
  28. # if __WORDSIZE == 64
  29. #  define __FD_ZERO_STOS "stosq"
  30. #  define __FD_SET_BTS "btsq"
  31. #  define __FD_CLR_BTR "btrq"
  32. #  define __FD_ISSET_BT "btq"
  33. # else
  34. #  define __FD_ZERO_STOS "stosl"
  35. #  define __FD_SET_BTS "btsl"
  36. #  define __FD_CLR_BTR "btrl"
  37. #  define __FD_ISSET_BT "btl"
  38. # endif
  39.  
  40. # define __FD_ZERO(fdsp) \
  41.   do {                                          \
  42.     int __d0, __d1;                                  \
  43.     __asm__ __volatile__ ("cld; rep; " __FD_ZERO_STOS                  \
  44.               : "=c" (__d0), "=D" (__d1)                  \
  45.               : "a" (0), "0" (sizeof (fd_set)              \
  46.                       / sizeof (__fd_mask)),          \
  47.                 "1" (&__FDS_BITS (fdsp)[0])                  \
  48.               : "memory");                          \
  49.   } while (0)
  50.  
  51. # define __FD_SET(fd, fdsp) \
  52.   __asm__ __volatile__ (__FD_SET_BTS " %1,%0"                      \
  53.             : "=m" (__FDS_BITS (fdsp)[__FDELT (fd)])          \
  54.             : "r" (((int) (fd)) % __NFDBITS)              \
  55.             : "cc","memory")
  56. # define __FD_CLR(fd, fdsp) \
  57.   __asm__ __volatile__ (__FD_CLR_BTR " %1,%0"                      \
  58.             : "=m" (__FDS_BITS (fdsp)[__FDELT (fd)])          \
  59.             : "r" (((int) (fd)) % __NFDBITS)              \
  60.             : "cc","memory")
  61. # define __FD_ISSET(fd, fdsp) \
  62.   (__extension__                                  \
  63.    ({register char __result;                              \
  64.      __asm__ __volatile__ (__FD_ISSET_BT " %1,%2 ; setcb %b0"              \
  65.                : "=q" (__result)                      \
  66.                : "r" (((int) (fd)) % __NFDBITS),              \
  67.                  "m" (__FDS_BITS (fdsp)[__FDELT (fd)])          \
  68.                : "cc");                          \
  69.      __result; }))
  70.  
  71. #else    /* ! GNU CC */
  72.  
  73. /* We don't use `memset' because this would require a prototype and
  74.    the array isn't too big.  */
  75. # define __FD_ZERO(set)  \
  76.   do {                                          \
  77.     unsigned int __i;                                  \
  78.     fd_set *__arr = (set);                              \
  79.     for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i)          \
  80.       __FDS_BITS (__arr)[__i] = 0;                          \
  81.   } while (0)
  82. # define __FD_SET(d, set)    (__FDS_BITS (set)[__FDELT (d)] |= __FDMASK (d))
  83. # define __FD_CLR(d, set)    (__FDS_BITS (set)[__FDELT (d)] &= ~__FDMASK (d))
  84. # define __FD_ISSET(d, set)  (__FDS_BITS (set)[__FDELT (d)] & __FDMASK (d))
  85.  
  86. #endif    /* GNU CC */
  87.